package com.Hsu.demo.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * @author Hsu琛君珩
 * @ClassName:JDKInvocation
 * @date 2024-01-17
 * @apiNote
 * @Version: v1.0
 */

/**
 * JDK动态代理实现
 */
public class JDKInvocation implements InvocationHandler {
    //目标对象
    private Object target;

    public JDKInvocation(Object target) {
        this.target = target;
    }

    /**
     * 参数说明
     * proxy：代理对象
     * method：代理对象要实现的方法，即其中需要重写的方法
     * args：method所对应方法的参数
     * @return
     * @throws Throwable
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("开始代理");
        //调用目标对象
        //proxy是代理对象
        Object result=method.invoke(target,args);//底层通过反射实现
        System.out.println("结束代理");
        return result;
    }
}
